package cn.yoaket.algorithm;



import cn.yoaket.unit.Point;

import static java.lang.Math.max;
import static java.lang.Math.min;

public class InterPolygon {

//    //计算两个相交线段的交点
//    static Point getInterSection(Point p1, Point p2, Point p3, Point p4) {
//        double x1=p1.getX(), y1=p1.getY(), x2=p2.getX(), y2=p2.getY();
//        double x3=p3.getX(), y3=p3.getY(), x4=p4.getX(), y4=p4.getY();
//        double b1 = (y2 - y1) * x1 + (x1 - x2) * y1;
//        double b2 = (y4 - y3) * x3 + (x3 - x4) * y3;
//        double D = (x2 - x1) * (y4 - y3) - (x4 - x3) * (y2 - y1);
//        double D1 = b2 * (x2 - x1) - b1 * (x4 - x3);
//        double D2 = b2 * (y2 - y1) - b1 * (y4 - y3);
//        Point point = new Point();
//        point.setLocation(D1 / D, D2 / D);
//        return point;
//    }
//     // 判断两个线段是否相交
//     static boolean isInterLine(Point p1,Point p2,Point p3,Point p4) {
//        double x1=p1.getX(), y1=p1.getY(), x2=p2.getX(), y2=p2.getY();
//        double x3=p3.getX(), y3=p3.getY(), x4=p4.getX(), y4=p4.getY();
//        // 快速排斥实验：判断两条线段在x以及y坐标的投影是否有重合
//        if (max(x3, x4) < min(x1, x2) || max(x1, x2) < min(x3, x4) ||
//            max(y3, y4) < min(y1, y2) || max(y1, y2) < min(y3, y4))
//            return false;
//        // 跨立实验（不考虑线段端点作为交点）：点A和点B分别在线段CD两侧，点C和点D分别在线段AB两侧
//        // 满足条件：(A-B)×(B−D)∗(A−B)×(C−B)<0 && (A−D)×(C−D)∗(B−D)×(C−D)<0
//        else
//            return ((x2 - x1) * (y4 - y2) - (x4 - x2) * (y2 - y1)) * ((x2 - x1) * (y3 - y2) - (x3 - x2) * (y2 - y1)) < 0 &&
//                   ((x4 - x1) * (y4 - y3) - (x4 - x3) * (y4 - y1)) * ((x4 - x2) * (y4 - y3) - (x4 - x3) * (y4 - y2)) < 0;
//    }
//    public static Polygon getInterPolygon(Polygon polygon1, Polygon polygon2) {
//
//
//        Polygon InterPolygon = new Polygon();  // 两个多边形相交部分
//        int Num1 = polygon1.size();  // 多边形A的顶点个数 起点终点算一个
//        int Num2 = polygon2.size();  // 多边形B的顶点个数 起点终点算一个
//
//        // 添加A位于B中的所有顶点：循环A的所有顶点，判断是否位于B中
//        for (int i = 0; i < Num1-1; i++) {
//            if(polygon2.contains(polygon1.get(i))) {
//                //是否需要new 对象 ?
//                InterPolygon.add(polygon1.get(i));
//            }
//        }
//
//        // 添加B位于A中的所有顶点：循环B的所有顶点，判断是否位于A中
//        for (int i = 0; i < Num2-1; i++) {
//            if(polygon1.contains(polygon2.get(i))) {
//                InterPolygon.add(polygon2.get((i)));
//            }
//        }
//
//        // 添加第一个顶点到末尾
//        // 添加A与B每一条边的交点：判断边与边是否相交，相交则求交点
//        boolean flag = false;  // false为不相交，true为相交
//        for (int i = 0; i < polygon1.size()-1; i++) {
//            for (int j = 0; j < polygon2.size()-1; j++) {
//                // 判断多边形A的边(x1,y1)→(x2,y2)和多边形B的边(x3,y3)→(x4,y4)是否相交
//                flag = isInterLine(polygon1.get(i), polygon1.get(i+1), polygon2.get(j), polygon2.get(j+1));
//                // 相交则求交点，并添加
//                if (flag) {
//                    Point interSection = getInterSection(polygon1.get(i), polygon1.get(i+1), polygon2.get(j), polygon2.get(j+1));
//                    //是否需要new?
//                    InterPolygon.add(interSection);
//                }
//            }
//        }
//        // 对多边形的顶点按逆时针方向进行排序
//        InterPolygon.sortByClock();
//        //将第一个点添加到末尾
//        InterPolygon.sealed();
//        // 计算两个多边形相交部分的面积
//        return InterPolygon;
//    }

}